<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables><variable name="OQP_Scenario" type="member" usage="const" id="3" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Scenario</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_SCENARIO</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Territory" type="member" usage="const" id="1" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Territory</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_TERRITORY</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Version" type="member" usage="const" id="2" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Version</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_VERSION</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Year" type="member" usage="const" id="4" product="Planning"><property name="application">SalesPln</property><property name="dimension">Years</property><property name="dimensionInputMode">name</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_YEAR</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable></variables><rulesets/><rules><rule id="1" name="OQP_Waterfall Allocation" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><variable_references><variable_reference name="OQP_Scenario" id="3"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Allocation</property><property name="seq">1</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Plan"</property></variable_reference><variable_reference name="OQP_Territory" id="1"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Allocation</property><property name="seq">2</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"Total Territory"</property></variable_reference><variable_reference name="OQP_Version" id="2"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Allocation</property><property name="seq">3</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Working Topdown"</property></variable_reference><variable_reference name="OQP_Year" id="4"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_Waterfall Allocation</property><property name="seq">4</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"FY17"</property></variable_reference></variable_references><script type="groovy">			/*RTPS:{OQP_Territory} {OQP_Version} {OQP_Scenario} {OQP_Year}*/
            /*Purpose:This business rules allocates quota from territory or Resource to its children based on the previous year actuals*/
			String entity = rtps.OQP_Territory.member.name;
			def grid=operation.grid;
			List&lt;String> CustomDimensions=[];
            List&lt;String> AdditionalDimensions=[];
            List&lt;String> CustomRelDimensions=[];
			List&lt;String> CustomIDescDimensions=[];
            List&lt;String> PrevDimensions =[]
			String strCrossDim = "";
			String driverDimMember;
            int iCnt;
			boolean isUnitsModel =false;
			String Scenario=rtps.OQP_Scenario.member.name;
			String Version=rtps.OQP_Version.member.name;			
			String Year=rtps.OQP_Year.member.name;
			try{
			 Application app=operation.getApplication();
             Cube qtp=operation.getCube(); 
             /*Evaluate if application model is Units or Revenue*/
              Dimension dim=app.getDimension(DimensionType.ACCOUNT,qtp);
              if (dim.hasMember("OQP_Units",qtp)==true)
              {
                isUnitsModel=true;
                driverDimMember="OQP_Last Year Units";
              }
              else
              {
                isUnitsModel=false;
                driverDimMember="OQP_Last Year Revenue";                    
              }
				List&lt;Dimension> dimList=app.getDimensions(qtp);
          	  dimList.each{
              	 if (it.hasUserVariable("OQP_UvPrd") || it.hasUserVariable("OQP_UvAccts")  )
               		{
						AdditionalDimensions.add(it.getName())
               		}
            	}
           /*Identify POV Dimensoins and their members*/
			List&lt;DataGrid.HeaderCell> hcells=grid.getPov()
			hcells.each{
					def dimName = it.getDimName();
					String mbrName=it.getMbrName();
					if (!mbrName.equals(Scenario) &amp;&amp; !mbrName.equals(Version) &amp;&amp; !it.getDimensionType().equals(DimensionType.SIMPLE_CURRENCY) &amp;&amp; !mbrName.equals(Year))
						{
							CustomRelDimensions.add('''@Relative("'''+mbrName+'''",0)''');
							strCrossDim= strCrossDim + "\""+ mbrName+"\"->"
							CustomDimensions.add(''''''+dimName+'''''');
						}					
					}		
			StringBuilder cscript = new StringBuilder();
            /*Start of Main Fix*/
			cscript.append('''SET AGGMISSG ON;\n''');
			cscript.append('''SET UPDATECALC OFF;\n''');			
			cscript.append('''FIX(@Relative("yeartotal",0),'''+ Year +''',''')
			cscript.append ('''"'''+Version+'''"''')
			cscript.append (''',"'''+Scenario+'''"''')
			if (app.getCurrencyMode()!=CurrencyMode.SINGLE_CURRENCY)
			{
				String sCurrency =  operation.grid.pov.find { it.dimName == 'Currency' }.essbaseMbrName 
                //cscript.append (''',"'''+app.getDefaultCurrency()+'''"''')
                cscript.append (''',"'''+ sCurrency +'''"''')
			}	
			cscript.append (''')\n''')
            /*For all level zero members of custom dimensions*/
			if (CustomRelDimensions.size()>0)
			{
			cscript.append('''	FIX(''' +CustomRelDimensions.join(''',''')+''')\n''')
			}
            /*Calucate Allocated Quota based on the last year actuals*/
			cscript.append ('''		FIX(@CHILDREN("'''+entity+'''"))\n''');			
			cscript.append('''			"OQP_Allocated Target Quota"=''')			
			cscript.append('''"'''+entity+'''"->"OQP_Adjusted Target Quota"* ''')
			cscript.append('''("'''+driverDimMember+'''"/''')
			cscript.append('''"'''+entity+'''"->"'''+driverDimMember+'''");\n''')			
            if (CustomRelDimensions.size()>0)
			{
			cscript.append ('''		ENDFIX\n''')
            }
			cscript.append ('''	ENDFIX\n''')
            /*Aggregate Custom dimensions*/
			if (CustomRelDimensions.size()>0)
			{
			cscript.append('''	FIX(''')
			cscript.append ('''"'''+driverDimMember +'''","OQP_Number of Reps","OQP_Number of Accounts","OQP_Allocated Target Quota"''')
			cscript.append (''',@CHILDREN("'''+entity+'''"))\n''');			
				for (iCnt=0;iCnt&lt;CustomDimensions.size()-1;iCnt++)
                {
                cscript.append('''			FIX(@RELATIVE("'''+CustomDimensions[iCnt]+'''",0))\n''')              
                }                
                for (iCnt=CustomDimensions.size()-1;iCnt>0;iCnt--)
                {
                if (PrevDimensions.size()>0)  
                 {
                 	cscript.append('''			FIX('''+PrevDimensions.join(''',''')+''')\n''')
                 }   
                cscript.append('''				AGG("'''+CustomDimensions[iCnt]+'''");\n''')    
                 if (PrevDimensions.size()>0) 
                  {
                     	cscript.append('''			ENDFIX\n''')
                  }
                  if (!AdditionalDimensions.contains(CustomDimensions[iCnt]))
                  {
                  	PrevDimensions.add('''"OEP_Total '''+CustomDimensions[iCnt]+'''"''')
                  }  
                cscript.append('''			ENDFIX\n''')
                }
                
                if (PrevDimensions.size()>0)  
                 {
                 	cscript.append('''			FIX('''+PrevDimensions.join(''',''')+''')\n''')
                 }   
                	cscript.append('''			AGG('''+CustomDimensions[0]+''');\n''')			
                 if (PrevDimensions.size()>0) 
                  {
                     	cscript.append('''			ENDFIX\n''')
                  }
			cscript.append ('''	ENDFIX\n''')
			}
			cscript.append ('''ENDFIX\n''')
			println(cscript.toString())
			return cscript.toString();
			}catch(all) {
				throw new HspRuntimeException('Error occured while executing business rule');
			}			
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_WATERFALL ALLOCATION"/></deployobjects></HBRRepo>